# Python的map()函数是一个非常有用的工具，它可以对可迭代对象中的每个元素应用一个指定的函数，然后返回一个迭代器，其中包含了所有元素经过函数处理后的结果。本文将深入探讨map()函数的各种用法，并提供丰富的示例代码来帮助大家更好地理解。
# map()函数语法
# map()函数的基本语法如下：
#
# map(function, iterable, ...)
# 1
# function: 一个函数，用于对每个可迭代对象的元素执行操作。
# iterable: 一个或多个可迭代对象，可以是列表、元组、集合等。
# map()函数将function应用于每个iterable的元素，并返回一个迭代器，该迭代器包含了所有元素经过function处理后的结果。


# 将字符串列表中的元素转换为大写
words = ["hello", "world", "python"]
uppercase_words = map(str.upper, words)
result = list(uppercase_words)
print(result)  # ['HELLO', 'WORLD', 'PYTHON']
print(result == words)  # False
print(words == map(str.lower, result))  # False




# 计算多个列表中元素的和
numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
sum_result = map(lambda x, y: x + y, numbers1, numbers2)
result = list(sum_result)
print(result)  # [11, 22, 33, 44, 55]





# 使用多个可迭代对象
# map()函数可以接受多个可迭代对象，只要您的函数有相应数量的参数。
def add_three_numbers(x, y, z):
    return x + y + z

numbers1 = [1, 2, 3]
numbers2 = [10, 20, 30]
numbers3 = [100, 200, 300]

result = list(map(add_three_numbers, numbers1, numbers2, numbers3))
print(result)  # [111, 222, 333]





# 处理不等长的可迭代对象
# 如果传递给map()函数的可迭代对象的长度不一致，map()将在最短的可迭代对象耗尽后停止迭代。这是一个非常有用的特性，因为它可以在处理数据时更加灵活。
def avg(x, y):
    return (x + y) / 2

numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30]

result = list(map(avg, numbers1, numbers2))
print(result)  # [5.5, 11.0, 16.5]
print(type(result))  # <class 'list'>





# 在这个示例中，numbers2比numbers1短，但map()函数仍然能够正常工作，并返回一个包含相应元素平方值的迭代器。
#
# 使用map()函数的注意事项
# 在使用map()函数时，有一些注意事项需要牢记：
#
# map()函数返回的是一个迭代器，如果需要立即获取结果，需要将其转换为列表或其他数据结构。
# 传递给map()的函数可以是自定义函数，也可以是内置函数或匿名函数（lambda表达式）。
# 如果传递给map()的可迭代对象的长度不一致，map()将在最短的可迭代对象耗尽后停止迭代。
# 在Python 3中，map()函数的返回值已经不再是列表，而是迭代器。如果需要列表，必须显式地将其转换为列表。



